# 是 Django 框架中用于导入模型模块的语句。这行代码的作用是从 Django 的 db 包中导入 models 模块，以便在 Django 项目中定义和操作数据库模型
from django.db import models
# Create your models here.
# 定义数据模型，与数据库表对应


# 在 Django 中，模型（Model） 是一个 Python 类，用于定义数据库表的结构和行为。每个模型类继承自 django.db.models.Model，
# 并通过类属性定义数据库表的字段。模型是 Django ORM（对象关系映射）的核心，它允许你用 Python 代码操作数据库，而无需直接编写 SQL 语句
class User(models.Model):

    genderchoice = [('M', '男'), ('F', '女'), ('T', '人妖')]

    # 字段名name  字段类型（字符串）：CharField  max_length:最大长度(字符串必须) unique:唯一
    name = models.CharField(max_length=32, unique=True)
    # 字段名password  字段类型（字符串）：CharField  max_length:最大长度(字符串必须)
    password = models.CharField(max_length=16)
    # email = models.EmailField(unique=True)  # 邮箱字段，必须唯一
    # created_at = models.DateTimeField(auto_now_add=True)  # 创建时间字段，自动设置为当前时间
    # updated_at = models.DateTimeField(auto_now=True)  # 更新时间字段，每次保存时自动更新为当前时间
    #   字段名age  字段类型(整型）：IntegerField
    age = models.IntegerField(verbose_name='年龄')
    #   字段名gender  字段类型（字符串）：CharField，max_length:最大长度(字符串必须),choices:可选项
    # 字段
    # gender = models.CharField(max_length=16, choices=genderchoice)
    # t = models.CharField(max_length=32, unique=True, primary_key=True)
    # r = models.IntegerField(verbose_name='r')
    # q = models.BooleanField(verbose_name='q', default=True)
    # w = models.DateTimeField(auto_now_add=True)
    # e = models.DateTimeField(auto_now=True)
    # y = models.DateField(verbose_name='y', null=True)
    # u = models.DecimalField(max_digits=5, decimal_places=2)
    # i = models.EmailField(unique=True)
    # o = models.CharField(choices=[('m', '男'), ('f', '女')])


    # # 每个模型类都可以包含一个内部的Meta类，用于定义模型的元数据
    # class Meta:
    #     # 定义元选项
    #     # 用于指定模型对应的数据库表名
    #     db_table = 'testmange_user'
    #     # 按照age升序排序，如果age相同，则按name降序排序  字段名前加 - 表示降序排序。 不加 - 表示升序排序
    #     ordering = ['age', '-name']
    #     verbose_name = "超级用户"  # 模型的可读名称
    #     verbose_name_plural = "用户列表"  # 模型的复数形式
    #     # 确保name和age的组合是唯一的
    #     unique_together = (('name', 'age'),)

    def __str__(self):
        # 定义模型的字符串表示
        # return f"{self.name} ({self.email})"
        return self.name

# 地址
class Address(models.Model):

    address = models.CharField(max_length=64, unique=True)
    created_time = models.DateTimeField(auto_now_add=True)
    updated_time = models.DateTimeField(auto_now=True)
    getchoices_qd = [('1', '已启动'), ('2', '未启动'), ('0', '禁止')]
    is_qd = models.CharField(max_length=2, choices=getchoices_qd, default=2)
    getchoices_delete = [('1', '已删除'), ('0', '未删除')]
    address_isdelete = models.CharField(max_length=2, choices=getchoices_delete, default=0)

    class Meta:
        db_table = 'testmanage_Address'

    def __str__(self):
        return f'{self.address}({self.created_time})'

# 店铺
class Storeinfo(models.Model):

    name = models.CharField(max_length=64, unique=True)
    # decimal_places:指定小数部分的最大位数
    goodprice = models.DecimalField(max_digits=6, decimal_places=2)
    # 一对一:related_name-相关name  --related_name这是可选参数，用于指定从 Address 实例反向访问包含这个字段的模型实例时使用的名称。
    # 在这个例子中，如果你有一个 Address 实例，你可以使用 address.storeinfo 来访问与之关联的包含 addressinfo 字段的模型实例
    addressinfo = models.OneToOneField(Address, on_delete=models.CASCADE, related_name='storeinfo')
    created_time = models.DateTimeField(auto_now_add=True)
    updated_time = models.DateTimeField(auto_now=True)
    getchoices_delete = [('1', '已删除'), ('0', '未删除')]
    store_isdelete = models.CharField(max_length=2, choices=getchoices_delete, default=0)

    class Meta:
        db_table = 'testmanage_Storeinfo'

    def __str__(self):
        return f'{self.name}({self.created_time})'

# 作者
class Author(models.Model):
    name = models.CharField(max_length=64, unique=True)
    gender = models.CharField(max_length=2)
    age = models.IntegerField()
    address = models.CharField(max_length=64)
    created_time = models.DateTimeField(auto_now_add=True)
    updated_time = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'testmanage_Author'

    def __str__(self):
        return f'{self.name}({self.created_time})'

class Book(models.Model):
    name = models.CharField(max_length=64, unique=True)
    # 一对多
    author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='book')

    class Meta:
        db_table = 'testmanage_Book'

    def __str__(self):
        return f'{self.name}'









